// 解题思路：
// 根据数据量来看，体操队员的数量最多 10 个，一般这种小数据量的题目可以采用暴搜的方式解决
// 暴搜就是暴力枚举所有可能的情况，要求是不重不漏
// 通过画决策树的方式进行，可以想象，有 10 个位置，依次往上安排队员
// 如果能够满足这个队员的排队需求就往上安排
// 如果不能满足这个队员的排队需求，就换下一个队员
// 如果安排到后面发现这种排队方法不行，就往前回溯
// 安排到最后一个队员，全都符合要求就收集结果

import java.util.*;

public class GroupGymnastics {
    public static int n;
    public static int[] arr;
    public static boolean[] check;
    public static int ret = 0;
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        arr = new int[n + 1];
        for(int i = 1; i <= n; i++) arr[i] = in.nextInt();
        check = new boolean[n + 1];
        dfs(1);
        System.out.println(ret);
    }
    public static void dfs(int pos){
        if(pos == n + 1){
            ret++;
            return;
        }
        for(int i = 1; i <= n; i++){
            if(check[i] == false && (check[arr[i]] == false || arr[i] == i)){
                check[i] = true;
                dfs(pos + 1);
                check[i] = false;
            }
        }
    }
}
